/**
 * 权限相关 API
 */

import request from '@/utils/request'

// ==================== 角色管理 ====================

/**
 * 获取角色列表
 * @param params 查询参数
 */
export function getRoleListApi(params: RoleQueryParams): Promise<RoleListResponse> {
  return request.get('/roles', { params })
}

/**
 * 获取所有角色（不分页）
 */
export function getAllRolesApi(): Promise<RoleInfo[]> {
  return request.get('/roles/all')
}

/**
 * 获取角色详情
 * @param id 角色ID
 */
export function getRoleDetailApi(id: number): Promise<RoleInfo> {
  return request.get(`/roles/${id}`)
}

/**
 * 创建角色
 * @param params 角色信息
 */
export function createRoleApi(params: CreateRoleParams): Promise<RoleInfo> {
  return request.post('/roles', params)
}

/**
 * 更新角色
 * @param params 角色信息
 */
export function updateRoleApi(params: UpdateRoleParams): Promise<RoleInfo> {
  return request.put(`/roles/${params.id}`, params)
}

/**
 * 删除角色
 * @param id 角色ID
 */
export function deleteRoleApi(id: number): Promise<void> {
  return request.delete(`/roles/${id}`)
}

/**
 * 获取角色的资源列表
 * @param roleId 角色ID
 */
export function getRoleResourcesApi(roleId: number): Promise<number[]> {
  return request.get(`/roles/${roleId}/resources`)
}

/**
 * 分配角色资源
 * @param params 分配参数
 */
export function assignRoleResourcesApi(
  params: AssignRoleResourceParams
): Promise<void> {
  return request.post(`/roles/${params.roleId}/resources`, { resourceIds: params.resourceIds })
}

// ==================== 资源管理 ====================

/**
 * 获取资源树
 * @param params 查询参数
 */
export function getResourceTreeApi(
  params?: ResourceQueryParams
): Promise<ResourceTreeResponse> {
  return request.get('/resources/tree', params)
}

/**
 * 获取所有权限树（用于用户权限管理）
 */
export function getAllPermissionTreeApi(): Promise<PermissionResource[]> {
  return request.get('/resources/all-tree')
}

/**
 * 获取资源列表
 * @param params 查询参数
 */
export function getResourceListApi(
  params?: ResourceQueryParams
): Promise<ResourceInfo[]> {
  return request.get('/resources', { params })
}

/**
 * 获取资源详情
 * @param id 资源ID
 */
export function getResourceDetailApi(id: number): Promise<ResourceInfo> {
  return request.get(`/resources/${id}`)
}

/**
 * 创建资源
 * @param params 资源信息
 */
export function createResourceApi(params: CreateResourceParams): Promise<ResourceInfo> {
  return request.post('/resources', params)
}

/**
 * 更新资源
 * @param params 资源信息
 */
export function updateResourceApi(params: UpdateResourceParams): Promise<ResourceInfo> {
  return request.put(`/resources/${params.id}`, params)
}

/**
 * 删除资源
 * @param id 资源ID
 */
export function deleteResourceApi(id: number): Promise<void> {
  return request.delete(`/resources/${id}`)
}

/**
 * 获取菜单资源树（用于构建菜单）
 */
export function getMenuTreeApi(): Promise<ResourceTreeResponse> {
  return request.get('/resources/menu-tree')
}

/**
 * 获取按钮权限列表（根据页面路由）
 * @param routeName 路由名称
 */
export function getButtonPermissionsApi(routeName: string): Promise<ResourceInfo[]> {
  return request.get(`/resources/buttons/${routeName}`)
}

// ==================== 用户页面和按钮权限管理 ====================

/**
 * 获取用户权限列表
 * @param userId 用户ID
 */
export function getUserPermissionsApi(userId: number): Promise<number[]> {
  return request.get(`/users/${userId}/permissions`)
}

/**
 * 分配用户权限
 * @param params 分配参数
 */
export function assignUserPermissionsApi(
  params: { userId: number, permissionIds: number[] }
): Promise<void> {
  return request.post(`/users/${params.userId}/permissions`, { permissionIds: params.permissionIds })
}

